Python机器学习案例|梵高的《星空》图片压缩

您所在的位置:网站首页 梵高的星空 线描画图片 Python机器学习案例|梵高的《星空》图片压缩

Python机器学习案例|梵高的《星空》图片压缩

2024-07-06 10:46| 来源: 网络整理| 查看: 265

Python机器学习案例:梵高的《星空》图片压缩

01 案例背景

本案例将奇异值分解用于处理图像压缩任务。要压缩的图片如图所示,是梵高的作品《星空》。 在这里插入图片描述

02 实现代码

Python实现代码如下所示:

from PIL import Image import os from numpy import * import matplotlib as mpl import matplotlib.pyplot as plt if __name__ == '__main__': mpl.rcParams['font.sans-serif'] = [u'simHei'] mpl.rcParams['axes.unicode_minus'] = False A = Image.open('starry_night.jpg') a = array(A) #转换成矩阵 #由于是彩色图像,所以3通道。a的最内层数组为三个数,分别表示RGB,用来表示一个像素 u_r, sigma_r, v_r = linalg.svd(a[:, :, 0]) u_g, sigma_g, v_g = linalg.svd(a[:, :, 1]) u_b, sigma_b, v_b = linalg.svd(a[:, :, 2]) def restore1(u, sigma, v, k): m = len(u) n = len(v) a = zeros((m, n)) #重构图像 a = dot(u[:, :k], diag(sigma[:k])).dot(v[:k, :]) #上述语句等价于如下形式 #for i in range(k): # ui = u[:, i].reshape(m, 1) # vi = v[i].reshape(1, n) # a += sigma[i] * dot(ui, vi) a[a 255] = 255 return rint(a).astype('uint8') plt.figure(facecolor = 'w', figsize = (10, 10)) #保留的奇异值个数依次为:1,2,...,12 K = 12 for k in range(1, K + 1): print(k) R = restore1(u_r, sigma_r, v_r, k) G = restore1(u_g, sigma_g, v_g, k) B = restore1(u_b, sigma_b, v_b, k) I = stack((R, G, B), axis = 2) #现实重构后的图片 plt.subplot(3, 4, k) plt.imshow(I) plt.axis('off') plt.title(u'奇异值个数:%d' % k) plt.suptitle(u'SVD与图像分解', fontsize = 20) plt.tight_layout(0.1, rect = (0, 0, 1, 0.92)) plt.show() 03 运行结果

运行以上代码的输出结果如图所示。 在这里插入图片描述

到这里这个简单的实力就完成啦!

关于Python的技术储备

在这里给大家分享一些免费的课程供大家学习,下面是课程里面的截图,扫描最下方的二维码就能全部领取, 如果图片失效点击蓝色字体便可跳转哦~点这里哦

1.Python所有方向的学习路线

在这里插入图片描述

2.学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。 在这里插入图片描述

3.学习资料

在这里插入图片描述

4.实战资料

实践是检验真理的唯一标准。这里的压缩包可以让你再闲暇之余帮你提升你的个人能力。 在这里插入图片描述

5.视频课程

在这里插入图片描述

好啦今天的分享就到这里结束了,快乐的时光总是短暂呢,想学习更多课程的小伙伴不要着急,有更多惊喜哦~在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3